import org.jaxen.dom.DOMXPath

/**
 *
 * @author siuming
 *
 */

/**
 *
 * @param doc
 * @param expr
 * @return
 */
def __eval_node(doc, expr) {
    new DOMXPath(expr).selectSingleNode(doc)
}

/**
 *
 * @param tagnode
 * @param expr
 * @return
 */
def __eval_nodelist(doc, expr) {
    new DOMXPath(expr).selectNodes(doc)
}

/**
 *
 * @param tagnode
 * @param expr
 * @return
 */
def __eval_text(doc, expr) {
    __trimstring(new DOMXPath(expr).stringValueOf(doc))
}

/**
 *
 * @param tagnode
 * @param expr
 * @return
 */
def __eval_textlist(doc, expr) {
    __eval_nodelist(doc, expr).collect { __trimstring(it.getNodeValue()) }
}

/**
 *
 * @param tagnode
 * @param xpath
 * @param keyattr
 * @param valattr
 * @return
 */
def __eval_attrmap(doc, xpath, keyattr, valattr) {
    __eval_nodelist(doc, xpath).inject([:], {
        result, node ->
            name = __trimstring(new DOMXPath("@$keyattr").stringValueOf(node))
            val = __trimstring(new DOMXPath("@$valattr").stringValueOf(node))
            result.put(name, val);
            result
    })
}
